package com.testing.end_recyc_word_icon;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.widget.EditText;

/**
 * 要应用一个Span总共分三步：
 * 1、构造String
 * 2、构造Span
 * 3、利用SetSpan（）对指定范围的String应用这个Span
 */
public class MainActivity extends AppCompatActivity {

    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText) findViewById(R.id.edit);

        //改变字体颜色

        //先构造SpannableString
        SpannableString spanString = new SpannableString("欢迎光临Harvic的博客");

        Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        /**
         * 在Android的开发中，凡是需要画图的地方大都离不开类Drawable。
         * Android的官方文档中介绍这个类就是被设计用来表示可以被画的东西。
         * A Drawable is a general abstraction for "something that can be drawn."
         * 细心的同学可能会发现这个类提供了这样两个方法：getIntrinsicWidth()和getIntrinsicHeight()，
         * 顾名思义他们是用来取得Drawable的固有的宽度和高度。
         * 那么问题就来了:我们有时候通过这两个方法取到的宽和高和实际的并不一样，这是怎么回事呢？
         * 笔者就遇到了同样的问题：我在assets中放了了一张png图片，它的分辨率是807x1211，
         * 然后通过Drawable.createFromStream(is, null)生成一个Drawable对象，
         * 最后利用上面的两个方法取drawable对象的宽高，居然结果是404x606。
         * 这是怎么回事呢？看笔者娓娓道来。
         * 再次强调一下，Drawable这个类是对所有可以画的东西的抽象，
         * 他可以是一张图片，也可以是实体的颜色，线等等，我们不能简单的认为它是一张图片。
         * 笔者经过实验发现，我的测试设备dpi是320，而android为了让同一个view在不同dpi的设备上大小尽量保持一致，
         * 建议度量单位采用dip/dp。所以我猜测上面两个方法的单位应该是dp,
         * 所以807px = 807 * 160 / 320 = 403.5 = 404dp ; 1211px = 1211 * 160 / 320 = 605.5 = 606dp,
         * 所以各位同学现在明白了吧，getIntrinsicWidth()和getIntrinsicHeight()返回的宽高应该是dp为单位的哦。
         */
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);

        //下划线（UnderlineSpan）
        //UnderlineSpan span = new UnderlineSpan();

        //删除线（StrikethroughSpan）
        //StrikethroughSpan span = new StrikethroughSpan();

        //粗体、斜体（StyleSpan）
        //StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);

        //字体大小
        //AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);

        //字体背景颜色（BackgroundColorSpan）
        //BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);

        //再构造一个改变字体颜色的Span
        //ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);

        //将这个Span应用于指定范围的字体
        spanString.setSpan(span, 2, 6, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

        //设置给EditText显示出来
        editText.setText(spanString);
    }
}
